#include <cstdlib>
#include <time.h>
#include "Nodo.h"
#include "AlfaBeta.h"
#include "MTD.h"


#define PVL 33
#define ABP_MAXHEIGTH 19
#define MTD_MAXHEIGTH 10

// moves on the principal variation
static int PV[] = {
    12, 21, 26, 13, 22, 
    18,  7,  6,  5, 27, 
    33, 23, 17, 11, 19, 
    15, 14, 31, 20, 32, 
    30, 10, 25, 24, 34, 
    28, 16,  4, 29, 35, 
    36, 8, 9
};

int main(int argc, char** argv) {
    //Nodo inicial:
    Nodo s0;
    //Nodos de la VP:
    Nodo VPN[PVL];
    
    AlfaBeta abp;
    
    MTD mtd;
    
    
   {    //Generando Los Nodos de la VP:
        int i;
        VPN[0].Set(PV[0], &s0);
        for(i = 1; i < PVL; i++)
            VPN[i].Set(PV[i], &VPN[i-1]);
    }
    
    
    {   //Calculando tiempos y resultados del MTD:
        int i;
        clock_t init, final;
        
        
        for(i = PVL - 1; i >= MTD_MAXHEIGTH ;i--){
            init=clock();
            int r = mtd.Buscar(&VPN[i], 40,  33,  (i % 2 == 0) );
            final=clock()-init;
            printf("MTD en Profundidad %d vale: %d con Tiempo %.4f y Nodos %d\n", i, r, (double)final / ((double)CLOCKS_PER_SEC), mtd.NodGen());
        }
    }
    
    {   //Calculando tiempos y resultados de Alfa-Beta Pruning:
        int i;
        clock_t init, final;
        
        for(i = PVL - 1; i >= ABP_MAXHEIGTH ;i--){
            init=clock();
            int r = abp.Buscar( &VPN[i], 33,  (i % 2 == 0) );
            final=clock()-init;
            printf("Alfa-Beta Pruning en Profundidad %d vale: %d con Tiempo %.4f y Nodos %d\n", i, r, (double)final / ((double)CLOCKS_PER_SEC), abp.NodGen());
        }
    }
    
    
    
    char c;
    printf("\nFinalizado...\n");
    scanf("%c", &c);
    
}


   
    
    
    


